package com.bjpowernode.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.bjpowernode.entity.TTranRemark;
import com.bjpowernode.mapper.TTranRemarkMapper;
import com.bjpowernode.query.TranRemarkQuery;
import com.bjpowernode.service.TranRemarkService;
import com.bjpowernode.util.LoginInfoUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 交易备注服务实现类
 * 实现TranRemarkService接口，处理交易备注的CRUD操作
 */
@Service
public class TranRemarkServiceImpl implements TranRemarkService {
    // 注入交易备注数据访问层对象，用于数据库操作
    @Resource
    private TTranRemarkMapper tTranRemarkMapper;

    /**
     * 添加交易备注
     * @param tranRemarkQuery 交易备注查询对象，包含交易ID和备注信息
     * @return 影响行数，1表示成功，0表示失败
     */
    @Override
    public int addTranRemarkById(TranRemarkQuery tranRemarkQuery) {
        TTranRemark tTranRemark = new TTranRemark();
        // 复制查询对象属性到实体对象
        BeanUtil.copyProperties(tranRemarkQuery, tTranRemark);
        // 设置创建时间为当前时间
        tTranRemark.setCreateTime(new Date());
        // 设置创建人为当前登录用户ID
        tTranRemark.setCreateBy(LoginInfoUtil.getCurrentLoginUser().getId());
        // 插入数据并返回影响行数
        int count = tTranRemarkMapper.insertSelective(tTranRemark);
        return count;
    }

    /**
     * 分页查询交易备注
     * @param id 交易ID
     * @param current 当前页码
     * @return 分页对象，包含交易备注列表和分页信息
     */
    @Override
    public PageInfo<TTranRemark> getTranRemarkByPage(Integer id, Integer current) {
        // 设置分页参数，每页5条记录
        PageHelper.startPage(current, 5);
        // 查询交易备注列表
        List<TTranRemark> tTranRemarks = tTranRemarkMapper.selectTranRemarkByPage(id);
        // 封装分页结果
        PageInfo<TTranRemark> pageInfo = new PageInfo<>(tTranRemarks);
        return pageInfo;
    }

    /**
     * 根据ID查询交易备注详情
     * @param id 交易备注ID
     * @return 交易备注实体对象
     */
    @Override
    public TTranRemark getTranRemarkDetailById(Integer id) {
        return tTranRemarkMapper.selectByPrimaryKey(id);
    }

    /**
     * 更新交易备注
     * @param tranRemarkQuery 交易备注查询对象，包含更新信息
     * @return 影响行数，1表示成功，0表示失败
     */
    @Override
    public int updateTranRemark(TranRemarkQuery tranRemarkQuery) {
        // 创建交易记录备注实体对象
        TTranRemark tTranRemark = new TTranRemark();
        // 设置交易记录备注ID
        tTranRemark.setId(tranRemarkQuery.getTranRemarkId());
        // 设置备注内容
        tTranRemark.setNoteContent(tranRemarkQuery.getNoteContent());
        // 设置备注方式
        tTranRemark.setNoteWay(tranRemarkQuery.getNoteWay());
        // 设置编辑时间
        tTranRemark.setEditTime(new Date());
        // 设置编辑人ID
        tTranRemark.setEditBy(LoginInfoUtil.getCurrentLoginUser().getId());
        // 调用Mapper方法更新数据（选择性更新，只更新非空字段）
        int count = tTranRemarkMapper.updateByPrimaryKeySelective(tTranRemark);
        // 返回更新结果
        return count;
    }

    /**
     * 根据ID删除交易备注
     * @param id 交易备注ID
     * @return 影响行数，1表示成功，0表示失败
     */
    @Override
    public int deleteTranRemarkById(Integer id) {
        return tTranRemarkMapper.deleteByPrimaryKey(id);
    }
}
